#modulo para el envio de mail de agradecimiento por la compra
# -*- coding: utf-8 -*-

#modulo para el envio de mail de agradecimiento por la compra

import consultasBD
import utiles
import os
import servers
import re

# Importamos librerias
import smtplib
import mimetypes
 
# Importamos los modulos necesarios
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
from email.Encoders import encode_base64
from email.mime.text import MIMEText

def validacionMail(email):
    if len(email) > 7:
        if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None:
            return True
    return False

def transmitir(lista):
    sucursal = int(utiles.getSucursalActiva())-1
    serverName = servers.mailservername[sucursal]
    host= servers.mailhost[sucursal]
    user= servers.mailuser[sucursal]
    password= servers.mailpassword[sucursal]
    port= servers.mailport[sucursal]
    email_from= servers.mailmail[sucursal]
    
    subject="FELICITACIONES !!!"
    
    miImagen = "imgs\\logosucursal"+str(sucursal+1)+".png"
    image_path= miImagen

    f = open("modelos\\cumple.html","r")
    html = f.read()
    f.close()

    cont=0
    i=0

    def enviarEmail(email_to,nombre,mensaje=""):
         
        # Creamos el mensaje
        texto = html.replace("MINOMBRE",nombre)

        # Creamos objeto Multipart, quien sera el recipiente que enviaremos
        msg = MIMEMultipart('related')
        msg['From']=email_from
        msg['To']=email_to
        msg['Subject']=subject
        if mensaje != "":
            texto = mensaje
            texto = texto.replace("MINOMBRE",nombre)
        msg_html = MIMEText(texto, 'html')
        msg.attach(msg_html)

        # Adjuntamos Imagen
        file = open(image_path, "rb")
        miimagen = file.read()
        file.close()
        
        attach_image = MIMEImage(miimagen)
        attach_image.add_header('Content-Disposition', 'attachment; filename = "'+image_path+'"')
        msg.attach(attach_image)
        
        # Autenticamos
        print "Autenticando",
        mailServer = smtplib.SMTP(host,port)
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        mailServer.login(user,password)

        # Enviamos
        print "Enviando"
        mailServer.sendmail(user, email_to, msg.as_string())
         
        # Cerramos conexion
        #mailServer.quit()        

    novedades = "REPORTE DE e-mail DE CUMPLES<br>"
    novedades+= "Para: MINOMBRE<br><br>"

    listaEnviada = '<br><ul>'
    listaErrores = 'ERRORES EN LAS SIGUIENTES CUENTAS<br><ul>'
    listaErrores2 = ''
    erroresencontrados = False
    for item in lista:
        email_destinatario = item[0]
        nombre = item[1]
        if not validacionMail(email_destinatario): 
            print email_destinatario,nombre,"--> ERROR e-mail"
            continue
        print email_destinatario,nombre,
        listaEnviada+='<li type="square">'+email_destinatario+' '+nombre+'</li>'

        try:
            enviarEmail(email_destinatario,nombre)
            cont=cont+1
            for delay in xrange(2000000): pass
        except:
            listaErrores+= '<li type="square">'+email_destinatario+' '+nombre+'</li>'
            listaErrores2 = email_destinatario+' '+nombre+'\n'
            erroresencontrados = True
    
    listaEnviada+='</ul>'
    listaErrores+= '</ul>'
    
    print "Total de cumpleanios transmitidos:",cont,
    novedades+= "<br>Cumples transmitidos: "+str(cont)+"<br>"
    novedades+= "Sucursal: "+utiles.datosSucursal()[1]+"<br><br>"+listaEnviada
    if erroresencontrados: novedades+= "<br><br>"+listaErrores
    subject="Cumples enviados el "+utiles.getfechatoday(None)
    enviarEmail("ceportela@gmail.com","Cesar",novedades)
    #enviarEmail("sussanboutique@gmail.com","Sussan",novedades)
    print "FIN TRANSMISION CUMPLEANIOS"

    if not erroresencontrados:
        utiles.mensaje(None,"e-mail de cumples enviados")
    else:
        print "Errores encontrados en las siguientes cuentas:"
        print listaErrores2
        utiles.mensaje(None,"Hubo errores en el envio de e-mail.\nVea los mensajes.")

def enviar(lista,test=0):
    #comentar las 2 lineas siguientes cuando se ponga en produccion
    if test != 0:
        #lista = [('sussanboutique@gmail.com','DIEGO')]
        lista = [('ceportela@gmail.com','Cesar')]
    print "TRANSMITIENDO FELICITACIONES DE CUMPLEANIOS"
    transmitir(lista)

    #si se implementa la salida por Amazon, comentar las lineas anteriores y
    #descomentar las siguientes hasta el final del archivo (o funcion)

##    from mktsend import Sender
##    username = 'sussan'
##    password = 'suSSan42'
##
##    subject = unicode('FELIZ CUMPLE!!','utf-8')
##    text = unicode('En este dia tan especial, te deseamos un muy Feliz Cumple desde Sussan Boutique')
##
##    f = open("cumple.html","r")
##    html = f.read()
##    f.close()
##
##    html = html.replace("##1","í") #a acentuada
##    html = html.replace("##2","í") #e acentuada
##    html = html.replace("##3","í") #i acentuada
##    html = html.replace("##4","ó") #o acentuada
##    html = html.replace("##5","ú") #u acentuada
##    html = html.replace("##6","ñ") #n tilde
##
##    s = Sender(username, password)
##    # Contactos segun RFC 822
##    # http://www.ietf.org/rfc/rfc0822.txt
##    # http://docs.python.org/library/rfc822.html
##    cont=0
##    error = []
##    #nro,nombre,puntos,ultimallamada,telefono,email,localidad
##    #0   1      2      3             4        5     6
##    for item in lista:
##        email_destinatario=item[0]
##        nombreCumple = item[1]
##        if not validacionMail(email_destinatario):
##            print email_destinatario,nombre,"--> ERROR e-mail"
##            continue
##        print nombreCumple, email_destinatario,
##        aux = html.replace("MINOMBRE",nombreCumple)
##        cont+= 1
##        to = [unicode(nombreCumple+' <'+email_destinatario+'>','utf-8')]
##        try:
##            resultado = s.send(to,subject,text,aux) # Esta linea debe devolver un "OK"
##            if resultado == '"OK"':
##                print resultado
##            else:
##                print "ERROR",
##                print resultado
##                error.append(nombreCumple+" / "+email_destinatario)
##        except:
##            print "ERROR: no enviado"
##            error.append(nombreCumple+" / "+email_destinatario)
##    if error != []:
##        utiles.mensaje(self, "Hubo errores en el envio.")
##    else:
##        utiles.mensaje(self, "Se enviaron correctamente: "+str(cont))

